Partición de datos
A veces es inteligente convertir variables numéricas a categóricas ya que si necesitamos aplicar métodos de análisis, simplificar variables esto puede ser conveniente. Para categorizar variables en R hacemos el siguiente procedimiento.
## Warning: package 'kableExtra' was built under R version 3.5.2
base <- read.csv("../Bases de datos/data-conversion.csv")
kable(head(base), "markdown")
23 |
NJ |
F |
61 |
5000 |
13 |
NY |
M |
55 |
1000 |
36 |
NJ |
M |
66 |
3000 |
31 |
VA |
F |
64 |
4000 |
58 |
NY |
F |
70 |
30000 |
29 |
TX |
F |
63 |
10000 |
#Creamos un vector de intervalos
Intervalos <- c(-Inf, 3000, 10000, Inf)
#Etiquetas de los intervalos
Etiquetas <- c("Bajo", "Medio", "Alto")
#Se crean las particiones
base$Income.c <- cut(base$Income, breaks = Intervalos, labels = Etiquetas)
kable(head(base), "markdown")
23 |
NJ |
F |
61 |
5000 |
Medio |
13 |
NY |
M |
55 |
1000 |
Bajo |
36 |
NJ |
M |
66 |
3000 |
Bajo |
31 |
VA |
F |
64 |
4000 |
Medio |
58 |
NY |
F |
70 |
30000 |
Alto |
29 |
TX |
F |
63 |
10000 |
Medio |
Podemos prescindir de las etiquetas de los intervalos o el los puntos de corte de los intervalos.
#Sin etiquetas
base$Income.c <- cut(base$Income, breaks = Intervalos)
kable(head(base), "markdown")
23 |
NJ |
F |
61 |
5000 |
(3e+03,1e+04] |
13 |
NY |
M |
55 |
1000 |
(-Inf,3e+03] |
36 |
NJ |
M |
66 |
3000 |
(-Inf,3e+03] |
31 |
VA |
F |
64 |
4000 |
(3e+03,1e+04] |
58 |
NY |
F |
70 |
30000 |
(1e+04, Inf] |
29 |
TX |
F |
63 |
10000 |
(3e+03,1e+04] |
#Sin intervalos
base$Income.c <- cut(base$Income,breaks = 3, labels = Etiquetas)
kable(head(base), "markdown")
23 |
NJ |
F |
61 |
5000 |
Bajo |
13 |
NY |
M |
55 |
1000 |
Bajo |
36 |
NJ |
M |
66 |
3000 |
Bajo |
31 |
VA |
F |
64 |
4000 |
Bajo |
58 |
NY |
F |
70 |
30000 |
Medio |
29 |
TX |
F |
63 |
10000 |
Bajo |
Subconjunto de datos
base1 <- read.csv("../Bases de datos/auto-mpg.csv")
kable(head(base1), "markdown")
1 |
28 |
4 |
140 |
90 |
2264 |
15.5 |
71 |
chevrolet vega 2300 |
2 |
19 |
3 |
70 |
97 |
2330 |
13.5 |
72 |
mazda rx2 coupe |
3 |
36 |
4 |
107 |
75 |
2205 |
14.5 |
82 |
honda accord |
4 |
28 |
4 |
97 |
92 |
2288 |
17.0 |
72 |
datsun 510 (sw) |
5 |
21 |
6 |
199 |
90 |
2648 |
15.0 |
70 |
amc gremlin |
6 |
23 |
4 |
115 |
95 |
2694 |
15.0 |
75 |
audi 100ls |
Basados en índices y nombres
Los indices representan la posición de el dato o los datos que queremos extraer, los indices estan datos desde el número 1.
# Fila de la 1 a la 5 y columnas 1 a la 3
kable(base1[1:5, 1:3], "markdown")
1 |
28 |
4 |
2 |
19 |
3 |
3 |
36 |
4 |
4 |
28 |
4 |
5 |
21 |
6 |
# Fila de la 1 a la 5 y columnas 1,3,5
kable(base1[1:5, c(1,3,5)], "markdown")
1 |
4 |
90 |
2 |
3 |
97 |
3 |
4 |
75 |
4 |
4 |
92 |
5 |
6 |
90 |
# Fila de la 1 a la 5 y columnas 1,3,5
kable(base1[1:5, c("displacement", "weight")], "markdown")
140 |
2264 |
70 |
2330 |
107 |
2205 |
97 |
2288 |
199 |
2648 |
Nota: Si se agrega nada antes de la coma indica que se tomas todas las filas y si no se agrega nada despues se seleccionan todas las columnas.
Basado en condiciones
kable(base1[base1$weight == max(base1$weight) |
base1$weight == min(base1$weight),], "markdown" )
30 |
30 |
35 |
4 |
72 |
69 |
1613 |
18 |
71 |
datsun 1200 |
240 |
240 |
13 |
8 |
400 |
175 |
5140 |
12 |
71 |
pontiac safari (sw) |
Asi mismo de pueden hacer filtro usando los simbolos:
!
-> representa la negación
&
-> representa si
|
-> representa o
La función subset()
Con la función subset()
podemos realizar los procedimientos anteriores.
kable(subset(base1, base1$cylinders == 3,
select = "car_name"), "markdown")
2 |
mazda rx2 coupe |
199 |
maxda rx3 |
251 |
mazda rx-7 gs |
365 |
mazda rx-4 |
Anexo: Eliminar registro duplicados
#Se eliminan los registros duplicados de la base de datos.
unique(base)
#Arroja un vector lógico, donde TRUE indica que la observación se encuentra duplicada
duplicated(base)
#Se obtienen solo los registros duplicados en la base de datos.
family[duplicated(base),]